Next: C++ Extensions, Previous: C++ Implementation, Up: Top

## 6 Extensions to the C Language Family

GNU C provides several language features not found in ISO standard C. (The `-pedantic` option directs GCC to print a warning message if any of these features is used.) To test for the availability of these features in conditional compilation, check for a predefined macro `__GNUC__`, which is always defined under GCC.

These extensions are available in C and Objective-C. Most of them are also available in C++. See Extensions to the C++ Language, for extensions that apply only to C++.

Some features that are in ISO C99 but not C90 or C++ are also, as extensions, accepted by GCC in C90 mode and in C++.

- Statement Exprs: Putting statements and declarations inside expressions.
- Local Labels: Labels local to a block.
- Labels as Values: Getting pointers to labels, and computed gotos.
- Nested Functions: As in Algol and Pascal, lexical scoping of functions.
- Constructing Calls: Dispatching a call to another function.
- Typeof: `typeof`: referring to the type of an expression.
- Conditionals: Omitting the middle operand of a ``?:`' expression.
- __int128: 128-bit integers---`__int128`.
- Long Long: Double-word integers---`long long int`.
- Complex: Data types for complex numbers.
- Floating Types: Additional Floating Types.
- Half-Precision: Half-Precision Floating Point.
- Decimal Float: Decimal Floating Types.
- Hex Floats: Hexadecimal floating-point constants.
- Fixed-Point: Fixed-Point Types.
- Named Address Spaces: Named address spaces.
- Zero Length: Zero-length arrays.
- Empty Structures: Structures with no members.
- Variable Length: Arrays whose length is computed at run time.
- Variadic Macros: Macros with a variable number of arguments.
- Escaped Newlines: Slightly looser rules for escaped newlines.
- Subscripting: Any array can be subscripted, even if not an lvalue.
- Pointer Arith: Arithmetic on `void`-pointers and function pointers.
- Pointers to Arrays: Pointers to arrays with qualifiers work as expected.
- Initializers: Non-constant initializers.
- Compound Literals: Compound literals give structures, unions or arrays as values.
- Designated Inits: Labeling elements of initializers.
- Case Ranges: `case 1 ... 9' and such.
- Cast to Union: Casting to union type from any member of the union.
- Mixed Declarations: Mixing declarations and code.
- Function Attributes: Declaring that functions have no side effects, or that they can never return.
- Label Attributes: Specifying attributes on labels.
- Attribute Syntax: Formal syntax for attributes.
- Function Prototypes: Prototype declarations and old-style definitions.
- C++ Comments: C++ comments are recognized.
- Dollar Signs: Dollar sign is allowed in identifiers.
- Character Escapes: ``\e`' stands for the character <ESC>.
- Variable Attributes: Specifying attributes of variables.
- Type Attributes: Specifying attributes of types.
- Alignment: Inquiring about the alignment of a type or variable.
- Inline: Defining inline functions (as fast as macros).
- Volatiles: What constitutes an access to a volatile object.
- Using Assembly Language with C: Instructions and extensions for interfacing C with assembler.
- Alternate Keywords: `__const__`, `__asm__`, etc., for header files.
- Incomplete Enums: `enum foo;`, with details to follow.
- Function Names: Printable strings which are the name of the current function.
- Return Address: Getting the return or frame address of a function.
- Vector Extensions: Using vector instructions through built-in functions.
- Offsetof: Special syntax for implementing `offsetof`.
- __sync Builtins: Legacy built-in functions for atomic memory access.
- __atomic Builtins: Atomic built-in functions with memory model.
- Integer Overflow Builtins: Built-in functions to perform arithmetics and arithmetic overflow checking.
- x86 specific memory model extensions for transactional memory: x86 memory models.
- Object Size Checking: Built-in functions for limited buffer overflow checking.
- Pointer Bounds Checker builtins: Built-in functions for Pointer Bounds Checker.
- Cilk Plus Builtins: Built-in functions for the Cilk Plus language extension.
- Other Builtins: Other built-in functions.
- Target Builtins: Built-in functions specific to particular targets.
- Target Format Checks: Format checks specific to particular targets.
- Pragmas: Pragmas accepted by GCC.
- Unnamed Fields: Unnamed struct/union fields within structs/unions.
- Thread-Local: Per-thread variables.
- Binary constants: Binary constants using the ``0b`' prefix.